package patterndesign.template;

/**
 * @Description
 * @Date 2021/9/15
 * @Created by Jonathan
 */
public abstract class HummerModel {

    /**
     * 发动汽车
     */
    protected abstract void start();

    /**
     * 停止
     */
    protected abstract void stop();

    /**
     * 有喇叭叫 是滴滴叫 还是哔哔叫
     */
    protected abstract void alarm();

    /**
     * 引擎叫声
     */
    protected abstract void engineBoom();

    final public void run() {
        // 发动汽车
        this.start();
        // 引擎开始轰鸣
        this.engineBoom();
        // 想让他叫 不想他叫就不叫
        if (isAlarm()) {
            this.alarm();
        }
        // stop
        this.stop();
    }

    /**
     * 钩子方法默认是会响的
     *
     * @return
     */
    protected boolean isAlarm() {
        return true;
    }

}
